package ift585.client;


import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

/*
 * Cette classe permet de diviser le fichier � envoyer en plusieur paquer de 1024
 */
public class FileSplitterUtility {
	// Constante
	private static final int CHUNK_SIZE = 1000;
	private static final int STARTING_OFFSET = 24;
	
	// Donné menbre
	private boolean isFileEnded = false;
	private String fileName = null;
	private FileInputStream stream = null;
	
	FileSplitterUtility(String FileName) throws FileNotFoundException{
		fileName = new String(FileName);
		stream = new FileInputStream(new File(fileName));
	}
	
	public byte[]getNextChunk(int ackSeq) throws IOException{
		byte[] nextChunk = new byte[CHUNK_SIZE + STARTING_OFFSET];
		int index = STARTING_OFFSET;

		int oneByte = 0;
		
		// Retourn null après le fichier de fin
		if(isFileEnded)
			return null;
		
		// Ajouter le numéro du paquet (ackSeq)
		nextChunk[0] = (byte)ackSeq;
	
		while(index < STARTING_OFFSET + CHUNK_SIZE && (oneByte = stream.read()) != -1){
			//placer le byte dans le prochain chunk à être envoyer
			nextChunk[index] = (byte)oneByte;
			index++;
		}
		
		// Détermine si le fichier est terminer d'être traduit
		if(oneByte == -1){
			isFileEnded = true;
			nextChunk[1] = 1; // is end of file
			byte[] indexFin = new byte[]{(byte) (index >> 24), (byte) (index >> 16), (byte) (index >> 8), (byte) (index >> 0)};
			for ( int i = 0 ; i< 4 ; i++){
				nextChunk[2+i] = indexFin[i];
			}
		}
		return nextChunk;
	}
	
	public boolean isAtEndOfFile(){
		return isFileEnded;
	}


	public int getAckNumber(byte[] dataReceived) {
		return (int)dataReceived[0];
	}
}
